using System;
using System.Collections.Generic;
using MvcCms.Data;
using System.Linq;

namespace MvcCmsProjectTracker.Service
{
    public interface IProjectService
    {
        void Save();

        bool AddProject(Project project);
        bool AddHelpPage(HelpPage helpPage);
        bool AddProjectCategory(ProjectCategory category);
        bool AddProjectCustomField(ProjectCustomField customField);
        bool AddProjectCustomFieldValue(ProjectCustomFieldValue customFieldValue);
        bool AddProjectMember(ProjectMember projectMember);
        bool AddProjectMilestone(ProjectMilestone milestone);
        bool AddProjectPriority(ProjectPriority priority);
        bool AddProjectStatus(ProjectStatus status);
        bool DeleteProject(Project project);
        bool DeleteProjectCategory(ProjectCategory category);
        bool DeleteProjectCustomField(ProjectCustomField customField);
        bool DeleteProjectCustomFieldValue(ProjectCustomFieldValue customFieldValue);
        bool DeleteProjectMember(ProjectMember projectMember);
        bool DeleteProjectMilestone(ProjectMilestone milestone);
        bool DeleteProjectPriority(ProjectPriority priority);
        bool DeleteProjectStatus(ProjectStatus status);

        IQueryable<Project> GetAllProjects();
        IQueryable<HelpPage> GetHelpPages();
        IQueryable<Project> GetMyProjects(Guid userId);
        IQueryable<Project> GetHelpDeskProjects();
        IQueryable<Project> GetNonHelpDeskProjects();
        Project GetProject(int projectID);
        IQueryable<ProjectCategory> GetProjectCategories(int projectID);
        ProjectCategory GetProjectCategory(int categoryID);
        ProjectCustomField GetProjectCustomField(int customFieldID);
        IQueryable<ProjectCustomField> GetProjectCustomFields(int projectID);
        ProjectCustomFieldValue GetProjectCustomFieldValue(int customFieldID);
        IQueryable<ProjectCustomFieldValue> GetProjectCustomFieldValues(int projectID);
        ProjectMember GetProjectMember(int projectID, Guid userId);
        //ProjectMember GetProjectMember(Guid userId);
        IQueryable<ProjectMember> GetProjectMembers(int projectID);
        ProjectMilestone GetProjectMilestone(int milestoneID);
        IQueryable<ProjectMilestone> GetProjectMilestones(int projectID);
        IQueryable<ProjectPriority> GetProjectPriorities(int projectID);
        ProjectPriority GetProjectPriority(int priorityID);
        ProjectStatus GetProjectStatus(int statusID);
        IQueryable<ProjectStatus> GetProjectStatuses(int projectID);
    }
}